import { createRouter, createWebHistory } from 'vue-router'
import store from '@/store'
import routesStatic from './routes-static.js'

const modules = import.meta.glob(['../views/**/*.vue', "!../views/**/components/*.vue"])



const router = createRouter({
  history: createWebHistory(),
  routes: routesStatic,
})
// 白名单路由 name 集合。在这里配置的是不需要登录的
const whiteNames = ["login", "403", "404"];
//非白名单的路由
router.beforeEach(async (to, from) => {
  // 登录拦截，
  if (!whiteNames.includes(to.name)) {
    // 要做登录状态的校验
    // 1. 获取 token
    // console.log("token", store);
    const token = store.state.user.token
    // 2. 判断 token 是否存在
    if (!token) {
      // 去登录
      return {
        name: "login",
        query: {
          redirect: to.fullPath,
        },
      }
    }
    // //判断路由权限
    // const routes= store.state.user.routes
    // if(to.name !=="index" && !routes.includes(to.path)){
    //   //没有权限
    //   return {name: "403"}
    // }

    const isAdd = store.state.user.isAdd
    //没有动态添加过时，才需要动态添加
    if (!isAdd) {
      //0.修改 isAdd 为true
      store.commit("user/setIsAdd", true)
      //1.获取用户个人信息,并返回当前用户的路由权限数据
      const routes = await store.dispatch("user/getPerson")
      // console.log("routes", routes)
      //2.循环routes动态添加路由权限
      routes.forEach(route => {
        router.addRoute('index', {
          path: route.router,
          //PS：如下代码会在生产出错，因为生产环境里面，根本就没有·Vue的文件，需要对该文件先做构建才行
          // component:() => import(`../${route.viewPath}`),
          component: modules[`../${route.viewPath}`]
        })
      })
      //3.触发重定向
      return to.fullPath
    }
  }
})



export default router